home *** CD-ROM | disk | FTP | other *** search
- #include <GestaltEqu.h>
- #include <SysEqu.h>
- #include <Devices.h>
-
- #include <stdio.h>
-
- #define gestaltArbitorAttr 'arb '
- #define gestaltSerialArbitrationExists 0
- #define dRAMBased 0x0040
- #define dOpened 0x0020
-
- Boolean SerialArbitrationExists(void)
- {
- long response;
- OSErr err;
-
- err = Gestalt(gestaltArbitorAttr, &response);
- if (err)
- return false;
- return ((response >> gestaltSerialArbitrationExists) & 1);
- }
-
-
- Boolean DriverIsOpen(StringPtr driverName)
- {
- Boolean canOpen = false;
- Boolean match = false;
- short index = 0;
- short count;
- DCtlHandle dceHandle;
- StringPtr namePtr;
- DCtlHandle *theUnitTable;
-
- // this is the low memory global containing the number of entries
- // in the Unit Table
- count = *(short *)UnitNtryCnt;
-
- theUnitTable = *(DCtlHandle **)UTableBase;
-
- while ( !match && (index < count)) {
- // get handle to a device control entry
- dceHandle = theUnitTable[index];
-
- if (dceHandle) {
- if (!( (**dceHandle).dCtlFlags & dRAMBased) )
- // RAM based drivers have a handle to their driver
- namePtr = (StringPtr)(**dceHandle).dCtlDriver+18;
- else
- // ROM based drivers have a pointer to their driver
- namePtr = (StringPtr) (*(DCtlPtr)dceHandle).dCtlDriver+18;
-
- // not case sensitive, diacritical marks count
- if (RelString(driverName, namePtr, false, true) == 0) {
- match = true;
- canOpen = ((**dceHandle).dCtlFlags & dOpened) ? true : false;
- }
- }
- index++;
- }
- return canOpen;
- }
-
- Boolean CRMInstalled(void)
- {
- long response;
- OSErr err;
-
- err = Gestalt(gestaltCRMAttr, &response);
- if (err)
- return false;
- return ((response >> gestaltCRMPresent) & 1);
- }
-
- Str255 gDriverNames[] = {"\p.NoDrvr",
- "\p.AOut",
- "\p.BIn",
- "\p.BOut",
- "\p.AppleCD",
- "\p.MPP",
- "\p.ASYC00",
- "\p.AIn"
- };
-
- #define TEST_CALL
- main()
- {
- OSErr err = noErr;
- short i;
- short numDrivers;
-
- printf("Test of serial port stuff\n");
- if (CRMInstalled())
- printf("Communication Resource Manager is installed.\n");
- if (SerialArbitrationExists())
- printf("Serial Arbitration exists\n");
-
- #ifdef TEST_CALL
- numDrivers = sizeof(gDriverNames) / sizeof(Str255);
- for (i = 0; i < numDrivers; i++)
- printf("DriverIsOpen(%#s)\treturned %s\n",
- gDriverNames[i], DriverIsOpen(gDriverNames[i])?"True ":"False");
- #endif
-
- #ifdef TEST_OPEN
- short refNum;
-
- if (!DriverIsOpen("\p.AIn"))
- err = OpenDriver("\p.AIn", &refNum);
- if (err)
- printf("OpenDriver returned %d\n", err);
- err = CloseDriver(refNum);
- if (err)
- printf("CloseDriver returned %d\n", err);
- #endif
- }